
from django.shortcuts import render, redirect

# Create your views here.


# 用户注册
from django.urls import reverse

from apps.users.models import User

'''
1.功能分析:
    用户行为:输入完成用户名,密码,确认密码,手机号,注册
    前端行为:收集用户名,密码,确认密码,手机号,注册给后端
    后端行为:实现注册
2.后端大体步骤
    1.接收数据
    2.验证数据
        2.1判断参数是否齐全
        2.2判断用户名是否符合规则
        2.3判断密码是否符合规则
        2.4判断两次密码是否一致
        2.5判断手机号是否符合规则
    3.保存数据
    4.返回响应
3.请求方式
POST
'''
from django.views import View
from django.http.response import HttpResponseBadRequest,JsonResponse, HttpResponse

###################用户注册#######################
class RegisterView(View):

    def get(self,request):

        return render(request,"register.html")

    def post(self,request):
        # 1.接受数据
        username=request.POST.get("username")
        password=request.POST.get("password")
        password2=request.POST.get("password2")
        mobile=request.POST.get("mobile")
        # 2.验证参数
        # 2.1判断参数是否齐全
        if not all([username,password,password2,mobile]):
            return HttpResponseBadRequest("参数不全")
        # 2.2判断用户名是否符合规则
        import re
        if not re.match(r"[a-zA-Z0-9]{5,20}",username):
            return HttpResponseBadRequest("用户名不符合规则")
        # 2.3判断密码是否符合规则
        if not re.match(r"^[0-9A-Za-z]{8,20}",password):
            return HttpResponseBadRequest("密码不符合规则")
        # 2.4判断两次密码是否符合规则
        if password2 != password:
            return HttpResponseBadRequest("两次密码不一致")
        # 2.5判断手机号是否符合规则
        if not re.match(r"^1[3-9]\d{9}$",mobile):
            return HttpResponseBadRequest("手机号不符合规则")
        # 3.保存数据
        user = User.objects.create_user(username=username,
                                        password=password,
                                        mobile=mobile)
        from django.contrib.auth import login
        # 状态保持
        login(request,user)

        # 4.返回响应
        return redirect(reverse("contents:index"))
        # return HttpResponse("OK")

################用户重复注册#######################
'''
功能分析
    用户行为:输入完成用户名,光标失去焦点
    前端行为:获取到数据,通过ajax请求给后端
    后端行为:实现用户重复注册
后端大体步骤:
    1.接收数据
    2.查询数据库
        若数量为1:重复
        若数量为0:不重复

'''
class RegisterUsernameCountView(View):

    def get(self,request,username):
        # 接收数据并查询数据库
        count = User.objects.filter(username=username).count()
        # 返回响应
        return JsonResponse({"count":count})

############手机号重复注册#####################
class RegisterMobileCountView(View):
    def get(self,request,mobile):
        # 接收数据并查询数据库
        count = User.objects.filter(mobile=mobile).count()

        return JsonResponse({"count":count})

'''
图片验证码功能分析
    用户行为:输入图片验证码
    前端行为:收到验证码,生成一个uuid
    后端行为:验证图片验证码

后端大体步骤:
    1.获取到验证码
    2.把获取到的uuid和图片验证码保存到redis中
    3.验证
    4.返回响应
'''










